package com.szjz.elasticsearch.eshelper.animation;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

/**
 * 7.0之后es官方废除type。之前也不建议在一个index下添加多个type， 即现在对Java来说一个实体类就是一个index
 * 设置索引库属性
 *
 * @author shibo
 */
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
public @interface ESTable {
    /**
     * 索引库名称 = 类名 (必要时可+时间命名索引库)
     *
     * @return
     */
    String indexName();

    /**
     * 新字段能写不能查 ?
     * Dynamic Mapping 的概念
     * <p>
     * Mapping有一个属性 dynamic，其定义了如何处理新增文档中包含的新增字段，其有如下3个值可选（默认是true）：
     * <p>
     * 1. true (默认)，允许新增文档中包含新增字段，并且新增字段也会被索引（即可被搜索）
     * <p>
     * 2. false， 允许新增文档包含新字段，但文档中包含的新增字段无法被索引
     * <p>
     * 3. strict， 不允许新增文档中包含新增字段, 如果包含就会报错
     */
    boolean dynamic() default true;

    /**
     * 数据主分片数，默认为5，有时候设置为3
     * 单个shard最大的文档数2,147,483,519
     * 创建索引时指定，后期无法修改
     */
    int shardNum() default 0;

    /**
     * 数据备份数，就是主分片的复制 如果只有一台机器，设置为0
     * 后期可以动态修改
     */
    int replicaNum() default 0;

    /**
     * es默认size最大值10000
     * 当数据量过大的时候可能无法满足需求
     */
    int size() default 0;

    /**
     * es数据刷新频率
     * 默认：1s刷新一次
     * 刷新间隔为-1代表关闭数据刷新
     * 刷新间隔设置时应改携带单位，如：1h、2m、3s
     * 为了增加数据插入es的速度，就要增大es刷新数据的的时间间隔 设置为10s
     */
    String refreshInterval() default "";
}
